package com.air.antispider.stream.dataprocess.businessprocess

import com.air.antispider.stream.common.bean.RequestType
import com.air.antispider.stream.dataprocess.constants.{BehaviorTypeEnum, FlightTypeEnum}

import scala.collection.mutable.ArrayBuffer

/**
  * 对请求类型进行打标签,看看当前请求是国内查询/预定，还是国际查询/预定
  */
object RequestTypeClassifier {
  def classifyByRequest(url: String, classifyRuleMap: Map[String, ArrayBuffer[String]]): RequestType = {
    //从国内查询列表中拿数据，如果没有数据，就给个默认值为null
    val nationalQueryList: ArrayBuffer[String] = classifyRuleMap.getOrElse("nationalQueryList", null)
    //如果国内查询列表不为空，说明有数据
    if (nationalQueryList != null) {
      //进行数据的遍历
      for (rule <- nationalQueryList) {
        //用url进行规则匹配
        if (url.matches(rule)) {
          //如果匹配上了，说明属于这个规则,进行返回
          return RequestType(FlightTypeEnum.National, BehaviorTypeEnum.Query)
        }
      }
    }
    //如果匹配不上，进行别的规则进行匹配，国内预定
    val nationalBookList: ArrayBuffer[String] = classifyRuleMap.getOrElse("nationalBookList", null)
    if (nationalBookList != null) {
      //进行数据的遍历
      for (rule <- nationalBookList) {
        //用url进行规则匹配
        if (url.matches(rule)) {
          //如果匹配上了，说明属于这个规则,进行返回
          return RequestType(FlightTypeEnum.National, BehaviorTypeEnum.Book)
        }
      }
    }
    //如果匹配不上，进行别的规则进行匹配，国际查询
    val internationalQueryList: ArrayBuffer[String] = classifyRuleMap.getOrElse("internationalQueryList", null)
    if (internationalQueryList != null) {
      //进行数据的遍历
      for (rule <- internationalQueryList) {
        //用url进行规则匹配
        if (url.matches(rule)) {
          //如果匹配上了，说明属于这个规则,进行返回
          return RequestType(FlightTypeEnum.International, BehaviorTypeEnum.Query)
        }
      }
    }
    //如果匹配不上，进行别的规则进行匹配，国际预定
    val internationalBookList: ArrayBuffer[String] = classifyRuleMap.getOrElse("internationalBookList", null)
    if (internationalBookList != null) {
      //进行数据的遍历
      for (rule <- internationalBookList) {
        //用url进行规则匹配
        if (url.matches(rule)) {
          //如果匹配上了，说明属于这个规则,进行返回
          return RequestType(FlightTypeEnum.International, BehaviorTypeEnum.Book)
        }
      }
    }
    //如果代码走到这里,还没有返回,代表所有的规则都没匹配上
    RequestType(FlightTypeEnum.Other, BehaviorTypeEnum.Other)
  }

}
